const $ = require('meeko')
const geohash = require('./geohash_base')

/** 百度坐标转高德（传入经度、纬度）
 *
 * @param {Number} lat
 * @param {Number} lng
 */
function bd2gd (lat, lng) {
  let xPI = (Math.PI * 3000.0) / 180.0
  let x = lng - 0.0065
  let y = lat - 0.006
  let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * xPI)
  let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * xPI)
  let gg_lng = z * Math.cos(theta)
  let gg_lat = z * Math.sin(theta)
  return { lat: gg_lat, lng: gg_lng }
}
/** 两点之间距离
 *
 * @param {Number} lat1
 * @param {Number} lng1
 * @param {Number} lat2
 * @param {Number} lng2
 */
function getDistance (lat1, lng1, lat2, lng2) {
  let radLat1 = (lat1 * Math.PI) / 180.0
  let radLat2 = (lat2 * Math.PI) / 180.0
  let a = radLat1 - radLat2
  let b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0
  let s =
    2 *
    Math.asin(
      Math.sqrt(
        Math.pow(Math.sin(a / 2), 2) +
          Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)
      )
    )
  s = s * 6378.137 // 地球半径;
  s = Math.round(s * 10000) / 10000
  return s
}
/** 找到最近距离
 *
 * @param {Array} arr
 * @param {Number} latOri
 * @param {Number} lngOri
 */
function getNearest (arr, latOri, lngOri) {
  let min = 99999
  let minIdx = 0
  for (let i = 0; i < arr.length; i++) {
    let item = arr[i]
    let dist = getDistance(latOri, lngOri, +item.lat, +item.lng)
    if (dist < min) {
      minIdx = i
      min = dist
    }
  }
  return arr[minIdx]
}
/** 经纬度转geohash反查地区
 *
 * @param {Number} lat
 * @param {Number} lng
 */
async function geo2Area (lat = 39.90877336, lng = 116.3974911) {
  let r
  r = geohash.encode(lat, lng, 6)
  console.log(r)
  let neighborArr = geohash.neighbors(r)
  neighborArr.push(r)
  let neighborSql = `select merger_name,code,zip_code,lng,lat from area where geohash6 in('${neighborArr.join(
    "','"
  )}')`
  let result = await sqliteArea.all(neighborSql)
  if (result.length < 1) {
    neighborSql = `select merger_name,code,zip_code,lng,lat from area where geohash6 like '${r.slice(
      0,
      5
    )}%'`
    result = await sqliteArea.all(neighborSql)
    if (result.length < 1) {
      neighborSql = `select merger_name,code,zip_code,lng,lat from area where geohash6 like '${r.slice(
        0,
        4
      )}%'`
      result = await sqliteArea.all(neighborSql)
    }
    if (result.length < 1) {
      neighborSql = `select merger_name,code,zip_code,lng,lat from area where geohash6 like '${r.slice(
        0,
        3
      )}%'`
      result = await sqliteArea.all(neighborSql)
    }
    if (result.length < 1) {
      neighborSql = `select merger_name,code,zip_code,lng,lat from area where geohash6 like '${r.slice(
        0,
        2
      )}%'`
      result = await sqliteArea.all(neighborSql)
    }
  } else {
    // do nothing
  }
  return getNearest(result, lat, lng)
}

module.exports = {
  geo2Area,
  bd2gd
}
//22.52235221862793, 113.93811798095703 创业投资大厦
//lat = 31.26241128, lng = 121.42334461 大宁
/*
length width        height
1      5,009.4km    4,992.6km
2      1,252.3km    624.1km
3      156.5km      156km
4      39.1km       19.5km
5      4.9km        4.9km
6      1.2km        609.4m
7      152.9m       152.4m
8      38.2m        19m
9      4.8m         4.8m
10     1.2m         59.5cm
11     14.9cm       14.9cm
12     3.7cm        1.9cm

高德zoomlevel
19-10m-（19=<zoom<20）
18-25m-（18=<zoom<19）
17-50m-（17=<zoom<18）
16-100m-（16=<zoom<17）
15-200m-（15=<zoom<16）company          geohash=7
14-500m-（14=<zoom<15）place            geohash=6
13-1km-（13=<zoom<14）                  geohash=6
12-2km-（12=<zoom<13）社区范围           geohash=6
11-5km-（11=<zoom<12）福田区 9*9平方公里  geohash=5
10-10km-（10=<zoom<11）
9-20km-（9=<zoom<10）
8-30km-（8=<zoom<9）
7-50km-（7=<zoom<8）
6-100km-（6=<zoom<7）
5-200km-（5=<zoom<6）
4-500km-（4=<zoom<5）
3-1000km-（3=<zoom<4）
2-1000km-（3=<zoom<4）

*/
